#pragma once

// #include <arpa/inet.h>
#include <netinet/in.h> // sockaddr_in{}
#include <string>       // 后面编译又需要了

// 封装socket地址类型
class InetAddress
{
public:
    // 端口形参在前面，默认用本地监听，可以InetAddress addr(8080);调用
    explicit InetAddress(const uint16_t port = 0, const std::string ip = "127.0.0.1");
    explicit InetAddress(const sockaddr_in &addr);

    // 注意：老API用指针
    // 第二个const：该函数保证不会修改对象的任何成员变量
    const sockaddr_in *getAddr() const;
    void setAddr(const sockaddr_in &addr);

    std::string toIp() const;
    uint16_t toPort() const;
    std::string toIpPort() const;

private:
    sockaddr_in addr_;
};